package com.kgame5.xtank3d.utils {
import com.kgame5.xtank3d.vo.tank.BodyMetaVO;

import kgame5.k3d.core.math.Vector3D;
import kgame5.k3d.core.obj3d.hardvo.HardVO;
import kgame5.kgu.spacial.SpacialManager;
import kgame5.kmath.MathLane;

import com.kgame5.xtank3d.vo.MyTankVO;

/*
 *弹道生成器
 *直线弹道。主炮炮弹
 *抛物线弹道，导弹
 *静止弹道，地雷
 *
 *这个要做好炮弹飞行是有距离的.
 *
 *尺寸，位置，速度，加速度
 */
public class LaneGenerator {
	//生成主炮的hardVO,包括起始位置和弹道，尺寸
	public static function genHardVO_CannonShot(tankVO:MyTankVO,shotRadius:int, shotFlySpeed:int):HardVO{
		//T.p("genHardVO_CannonShot");
		
	
		//--设置hardVO
		var hardVO:HardVO=new HardVO();
		
		//1,炮弹尺寸
		hardVO.bball.R= shotRadius;//这个很重要，冒烟的时候要根据hardVO.R来放置好烟
		hardVO.aabb.A=shotRadius*2;
		hardVO.aabb.B=shotRadius*2;
		hardVO.aabb.H=shotRadius*2;
		
		var fireRotY:int=tankVO.hardVO.v3d_r.y+ tankVO.barbRotY;
		
		//2,炮弹位置
		//位置
		var RadiusXOZ:int = tankVO.hardVO.bball.R+shotRadius+2;//+2是为了防止斜着开炮的时候炸自己
		
		var v3d_posi:Vector3D=Vector3D.SPolarXOZ(fireRotY, RadiusXOZ);
		v3d_posi.x+=tankVO.hardVO.v3d_p.x;
		v3d_posi.z+=tankVO.hardVO.v3d_p.z;
		v3d_posi.y=tankVO.hardVO.v3d_p.y+ tankVO.barbRotY + shotRadius;//playerVO.builderInfoVO.GunY;
		
		//速度
		var v3d_speed:Vector3D=Vector3D.SPolarXOZ(fireRotY, shotFlySpeed);
		//v3d_speed.x+=playerVO.hardVO.v3d_v.x;//炮弹自己速度加坦克速度
		//v3d_speed.z+=playerVO.hardVO.v3d_v.z;//炮弹自己速度加坦克速度
		
		var ax:int=0;
		var ay:int=0;//PosiM.G;
		var az:int=0;
		
		//--
		hardVO.v3d_p.copy(v3d_posi);
		hardVO.v3d_v.copy(v3d_speed);
		hardVO.v3d_a.fill(ax,ay,az);
		
		//T.p("P:"+hardVO.v3d_p);
		//T.p("V:"+hardVO.v3d_v);
		//T.p("R:"+hardVO.R);
		
		return hardVO;
	}
	
	//跟踪导弹的hardVO
	public static function genHardVO_Missile( tankVO:MyTankVO, shotRadius:int, shotFlySpeedXOZ:int, aimX:int, aimZ:int):HardVO{
		
		
		var hardVO:HardVO=new HardVO();
		
		//1,尺寸
		hardVO.bball.R=shotRadius;
		hardVO.aabb.A=shotRadius*2;
		hardVO.aabb.B=shotRadius*2;
		hardVO.aabb.H=shotRadius*2;
		
		//--
		var x:int=tankVO.hardVO.v3d_p.x;
		var y:int=tankVO.hardVO.v3d_p.y+tankVO.hardVO.aabb.H/2;//H/2是因为坦克为了表示中心碰撞，H被x2了
		var z:int=tankVO.hardVO.v3d_p.z;
		
		//--x,y,z
		hardVO.v3d_p.fill(x, y, z);
		
		//--vx,vy,vz
		var dz:int=aimZ-z;
		var dx:int=aimX-x;
		var dis:int=Math.sqrt(dx*dx+dz*dz);
		
		var vy:int=MathLane.CalcVY(y, shotFlySpeedXOZ, dis,SpacialManager.G);
		var vx:int=0;
		var vz:int=0;
		
		if(dis!=0){
			vx=shotFlySpeedXOZ*dx/dis;
			vz=shotFlySpeedXOZ*dz/dis;
		}
		
		hardVO.v3d_v.fill(vx, vy, vz);
		
		//--ax,ay,az
		hardVO.v3d_a.fill(0,SpacialManager.G,0);
		
		return hardVO;
	}
	
	//地雷系的hardVO
	public static function genHardVO_Mine(tankVO:MyTankVO,shotRadius:int):HardVO{
		
		
		var hardVO:HardVO=new HardVO();
		
		//1,尺寸
		hardVO.bball.R=shotRadius;
		hardVO.aabb.A=shotRadius*2;
		hardVO.aabb.B=shotRadius*2;
		hardVO.aabb.H=shotRadius*2;
		
		hardVO.v3d_p.copy(tankVO.hardVO.v3d_p);
		hardVO.v3d_v.fill(0,0,0);
		hardVO.v3d_a.fill(0,0,0);
		
		return hardVO;
	}
}
}
